/*
 * Servico.java
 *
 * Created on 14 de Maio de 2007, 17:11
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package pt.iscte.dcti.es.rhplus.servico;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Hashtable;
import java.util.LinkedList;

import pt.iscte.dcti.es.rhplus.sistema.ContaDeUtilizador;
import pt.iscte.dcti.es.rhplus.sistema.UtensiliosParaDatas;
import pt.iscte.dcti.es.rhplus.sistema.persistencia.AcessoBD;
import pt.iscte.dcti.es.rhplus.utilizador.ClienteEmpresa;
import pt.iscte.dcti.es.rhplus.utilizador.ClienteParticular;
import pt.iscte.dcti.es.rhplus.utilizador.Colaborador;
import pt.iscte.dcti.es.rhplus.utilizador.Medico;
import pt.iscte.dcti.es.rhplus.utilizador.MembroDoAgregado;
import pt.iscte.dcti.es.rhplus.utilizador.Utente;

/**
 * 
 * @author Gustavo Cabral
 * @author Helena Monteiro
 * @author Joao Catarino
 * @author Tiago Moreiras
 */
public class Servico {

	/**
	 * Creates a new instance of Servico
	 */
	public Servico(final int id_servico, final Colaborador colaborador, final Utente utente, final int id_pagamento, final double preco,
			final double percentagem, final Date data, final String sintoma, final String diagnostico, final String estado,
			final String observacao_publica, final String observacao_privada, final ServicoGenerico servico_generico, final int id_hospital) {

		this.id_servico = id_servico;
		this.colaborador = colaborador;
		this.utente = utente;
		this.id_pagamento = id_pagamento;
		this.preco = preco;
		this.percentagem = percentagem;
		this.data = data;
		this.sintoma = sintoma;
		this.diagnostico = diagnostico;
		this.estado = estado;
		this.observacao_publica = observacao_publica;
		this.observacao_privada = observacao_privada;
		this.servico_generico = servico_generico;
		this.id_hospital = id_hospital;

	}

	public int getIdServico() {
		return id_servico;
	}

	public Colaborador getColaborador() {
		return colaborador;
	}

	public void setColaborador(final Colaborador colaborador) {
		this.colaborador = colaborador;
	}

	public Utente getUtente() {
		return utente;
	}

	public void setUtente(final Utente utente) {
		this.utente = utente;
	}

	public int getIdPagamento() {
		return id_pagamento;
	}

	public void setIdPagamento(final int id_pagamento) {
		this.id_pagamento = id_pagamento;
	}

	public double getPreco() {
		return preco;
	}

	public void setPreco(final double preco) {
		this.preco = preco;
	}

	public double getPercentagem() {
		return percentagem;
	}

	public void setPercentagem(final double percentagem) {
		this.percentagem = percentagem;
	}

	public Date getData() {
		return data;
	}

	public void setData(final Date data) {
		this.data = data;
	}

	public String getSintoma() {
		return sintoma;
	}

	public void setSintoma(final String sintoma) {
		this.sintoma = sintoma;
	}

	public String getDiagnostico() {
		return diagnostico;
	}

	public void setDiagnostico(final String diagnostico) {
		this.diagnostico = diagnostico;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(final String estado) {
		this.estado = estado;
	}

	public String getObservacaoPublica() {
		return observacao_publica;
	}

	public void setObservacaoPublica(final String observacao_publica) {
		this.observacao_publica = observacao_publica;
	}

	public String getObservacaoPrivada() {
		return observacao_privada;
	}

	public void setObservacaoPrivada(final String observacao_privada) {
		this.observacao_privada = observacao_privada;
	}

	public ServicoGenerico getServicoGenerico() {
		return servico_generico;
	}

	public int getIdHospital() {
		return id_hospital;
	}

	public void cancela() {
		this.estado = Servico.ESTADO_CANCELADO;
	}

	public void concluiPorComparencia() {
		this.estado = Servico.ESTADO_CONCLUIDO_POR_COMPARENCIA;
	}

	public void concluiPorFalta() {
		this.estado = Servico.ESTADO_CONCLUIDO_POR_FALTA;
	}

	public static void insere(final Hashtable<String, Object> dados_do_servico_prestado) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("inserir_servico_prestado");
		acesso_bd.executaUpdate(qryName, dados_do_servico_prestado);
		acesso_bd.fechaLigacao();

	}
        public static void insereInternamento(final Hashtable<String, Object> dados_para_internamento) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("inserir_internamento_cliente");
		acesso_bd.executaUpdate(qryName, dados_para_internamento);
		acesso_bd.fechaLigacao();

	}

	public static void altera(final Hashtable<String, Object> dados_do_servico_prestado) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("alterar_servico_prestado");
		if (!dados_do_servico_prestado.get("var_sintoma").equals(""))
			qryName = new String("alterar_servico_prestado_com_ficha");
		acesso_bd.executaUpdate(qryName, dados_do_servico_prestado);
		acesso_bd.fechaLigacao();

	}

	public static void remove(final int id_servico_prestado) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("remover_servico_prestado");
		Hashtable<String, Object> dados_do_servico = new Hashtable<String, Object>();
		dados_do_servico.put("var_id_servico_prestado", new Integer(id_servico_prestado));

		acesso_bd.executaUpdate(qryName, dados_do_servico);
		acesso_bd.fechaLigacao();
	}

	public static Servico devolve(final int id_servico_prestado) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_servico_prestado");
		Hashtable<String, Object> dados_do_servico_prestado = new Hashtable<String, Object>();
		dados_do_servico_prestado.put("var_id_servico_prestado", id_servico_prestado);
		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_servico_prestado);

		if (result_set.next()) {

			// Criar o Servico
			int id_utente = result_set.getInt("id_utente");
			String perfil = ContaDeUtilizador.devolvePerfil(id_utente);
                        if(perfil==null) perfil="membro_do_agregado";
			Utente utente = null;
			if (perfil.equals("cliente_particular"))
				utente = ClienteParticular.devolve(id_utente);
			else if (perfil.equals("cliente_empresa"))
				utente = ClienteEmpresa.devolve(id_utente);
			else if (perfil.equals("membro_do_agregado"))
				utente = MembroDoAgregado.devolve(id_utente);

			int numero_de_colaborador = result_set.getInt("numero_de_colaborador");
			Colaborador colaborador = Medico.devolve(numero_de_colaborador);

			int id_pagamento = result_set.getInt("id_pagamento");
			double preco = result_set.getDouble("preco");
			double percentagem = result_set.getDouble("percentagem");

			Timestamp timestamp = result_set.getTimestamp("data");
			Date data = new Date(timestamp.getTime());

			String sintoma = result_set.getString("sintoma");
			String diagnostico = result_set.getString("diagnostico");
			String estado = result_set.getString("estado");
			String observacao_publica = result_set.getString("observacao_publica");
			String observacao_privada = result_set.getString("observacao_privada");
			ServicoGenerico servico_generico = ServicoGenerico.devolve(result_set.getInt("id_servico_generico"));
			int id_hospital = result_set.getInt("id_hospital");
			;

			acesso_bd.fechaLigacao();

			Servico servico = new Servico(id_servico_prestado, colaborador, utente, id_pagamento, preco, percentagem, data, sintoma, diagnostico,
					estado, observacao_publica, observacao_privada, servico_generico, id_hospital);

			return servico;
		} else
			return null;
	}

	public static LinkedList<Servico> devolveTodosOsActivos() throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_activos");
		ResultSet result_set = acesso_bd.executaSelect(qryName, null);

		// Criar a lista de Serviços
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosOsActivosDoUtente(final int id_utente) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_activos_do_utente");
		Hashtable<String, Object> dados_do_utente = new Hashtable<String, Object>();
		dados_do_utente.put("var_id_utente", new Integer(id_utente));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_utente);

		// Criar a lista de Servicos
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosOsActivosDoColaborador(final int numero_de_colaborador) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_activos_do_colaborador");
		Hashtable<String, Object> dados_do_utente = new Hashtable<String, Object>();
		dados_do_utente.put("var_numero_de_colaborador", new Integer(numero_de_colaborador));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_utente);

		// Criar a lista de Servicos
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosOsCancelados() throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_cancelados");
		ResultSet result_set = acesso_bd.executaSelect(qryName, null);

		// Criar a lista de servicos
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosOsCanceladosDoUtente(final int id_utente) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_cancelados_do_utente");
		Hashtable<String, Object> dados_do_utente = new Hashtable<String, Object>();
		dados_do_utente.put("var_id_utente", new Integer(id_utente));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_utente);

		// Criar a lista de hospitais
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosOsCanceladosDoColaborador(final int numero_de_colaborador) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_cancelados_do_colaborador");
		Hashtable<String, Object> dados_do_utente = new Hashtable<String, Object>();
		dados_do_utente.put("var_numero_de_colaborador", new Integer(numero_de_colaborador));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_utente);

		// Criar a lista de hospitais
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosOsConcluidos() throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_concluidos");
		ResultSet result_set = acesso_bd.executaSelect(qryName, null);

		// Criar a lista de Servicos
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

        public static LinkedList devolveFichasParaLink(final int id_pessoa)throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {
            // Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_as_consultas_para_links_das_fichas_medicas");
		Hashtable<String, Object> dados_do_cliente = new Hashtable<String, Object>();
		dados_do_cliente.put("var_id_pessoa", new Integer(id_pessoa));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_cliente);

		// Criar a lista de Servicos
		LinkedList lista_de_servicos = new LinkedList();
                LinkedList lista = null;

		while (result_set.next()) {
                    lista= new LinkedList();
                    lista.add(result_set.getString("hospital.nome"));
                    lista.add(result_set.getString("servicoprestado.data"));                    
                    lista.add(result_set.getInt("servicoprestado.id_servico_prestado"));
                    
                    lista_de_servicos.add(lista);
                }
                return lista_de_servicos;
        }
        
        public static LinkedList<String> devolveTodosOsDadosDaFichaMedica(final int id_servico_prestado)throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {
            // Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_dados_de_determinada_ficha_medica");
		Hashtable<String, Object> dados_da_ficha_medica = new Hashtable<String, Object>();
		dados_da_ficha_medica.put("var_id_servico_prestado", id_servico_prestado);                
                ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_ficha_medica);
                
                // Criar a lista dos dados para a ficha medica - So vai devolver 1 registo
		LinkedList<String> lista_dos_dados = new LinkedList<String>();
                
                while (result_set.next()) {
                    lista_dos_dados.add(result_set.getString("servicoprestado.data"));
                    lista_dos_dados.add(result_set.getString("servicogenerico.tipo"));
                    lista_dos_dados.add(result_set.getString("servicogenerico.especialidade"));

                    lista_dos_dados.add(result_set.getString("hospital.nome"));
                    lista_dos_dados.add(result_set.getString("pessoa.nome"));// nome do medico

                    lista_dos_dados.add(result_set.getString("servicoprestado.sintoma"));
                    lista_dos_dados.add(result_set.getString("servicoprestado.diagnostico"));
                    lista_dos_dados.add(result_set.getString("servicoprestado.observacao_publica"));
                    lista_dos_dados.add(result_set.getString("servicoprestado.observacao_privada"));
                }
                                               		
		acesso_bd.fechaLigacao();

		return lista_dos_dados;
        }
        
	public static LinkedList<Servico> devolveTodosOsConcluidosDoUtente(final int id_utente) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_concluidos_do_utente");
		Hashtable<String, Object> dados_do_utente = new Hashtable<String, Object>();
		dados_do_utente.put("var_id_utente", new Integer(id_utente));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_utente);

		// Criar a lista de Servicos
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosOsConcluidosDoColaborador(final int numero_de_colaborador) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_concluidos_do_colaborador");
		Hashtable<String, Object> dados_do_utente = new Hashtable<String, Object>();
		dados_do_utente.put("var_numero_de_colaborador", new Integer(numero_de_colaborador));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_utente);

		// Criar a lista de Servicos
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosDoPagamento(final int id_pagamento) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_do_pagamento");
		Hashtable<String, Object> dados_do_pagamento = new Hashtable<String, Object>();
		dados_do_pagamento.put("var_id_pagamento", new Integer(id_pagamento));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_pagamento);

		// Criar a lista de hospitais
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosDoDia() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_do_dia");

		ResultSet result_set = acesso_bd.executaSelect(qryName, null);

		// Criar a lista de hospitais
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static LinkedList<Servico> devolveTodosDoDiaDoColaborador(final int numero_de_colaborador) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todos_os_servicos_do_dia_do_colaborador");
		Hashtable<String, Object> dados_do_colaborador = new Hashtable<String, Object>();
		dados_do_colaborador.put("var_numero_de_colaborador", new Integer(numero_de_colaborador));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_colaborador);

		// Criar a lista de hospitais
		LinkedList<Servico> lista_de_servicos = new LinkedList<Servico>();

		while (result_set.next()) {

			// Criar o Servico
			int id_servico_prestado = result_set.getInt("id_servico_prestado");
			Servico servico = Servico.devolve(id_servico_prestado);
			lista_de_servicos.add(servico);
		}

		acesso_bd.fechaLigacao();

		return lista_de_servicos;
	}

	public static int devolveUltimoIdentificadorDeInsercao() throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_ultimo_id_de_servico");
		ResultSet result_set = acesso_bd.executaSelect(qryName, null);
		result_set.next();
		int ultimo_id_servico = result_set.getInt("ultimo_id");
		acesso_bd.fechaLigacao();
		return ultimo_id_servico;
	}

	public boolean estaPago() {
		return id_pagamento > 0;
	}

	public void removePagamento() {
		this.id_pagamento = -1;
	}

	public void paga(final int id_pagamento) {
		this.id_pagamento = id_pagamento;
	}

	public boolean temFichaMedica() {
		return sintoma != null && diagnostico != null && observacao_publica != null && observacao_privada != null;
	}

	public void gravaParaBaseDeDados() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
		Servico.altera(toHashtable());
	}

	public Hashtable<String, Object> toHashtable() {
		Hashtable<String, Object> dados_servico = new Hashtable<String, Object>();

		dados_servico.put("var_id_servico_prestado", this.getIdServico());
		dados_servico.put("var_numero_de_colaborador", this.getColaborador().getIdPessoa());
		dados_servico.put("var_id_utente", this.getUtente().getIdPessoa());
		dados_servico.put("var_id_pagamento", this.getIdPagamento());
		dados_servico.put("var_preco", this.getPreco());
		dados_servico.put("var_percentagem", this.getPercentagem());

		// Data
		Date data_actual = this.getData();
		int ano = Integer.parseInt(UtensiliosParaDatas.devolveAnoDaData(data_actual));
		int mes = Integer.parseInt(UtensiliosParaDatas.devolveMesDaData(data_actual));
		int dia = Integer.parseInt(UtensiliosParaDatas.devolveDiaDaData(data_actual));
		int hora = Integer.parseInt(UtensiliosParaDatas.devolveHoraDaData(data_actual).split(":")[0]);
		String data_de_marcacao = UtensiliosParaDatas.devolveDataEHoraEmString(ano, mes, dia, hora, 0);

		dados_servico.put("var_data", data_de_marcacao);

		if (this.getSintoma() != null)
			dados_servico.put("var_sintoma", this.getSintoma());
		else
			dados_servico.put("var_sintoma", "");

		if (this.getDiagnostico() != null)
			dados_servico.put("var_diagnostico", this.getDiagnostico());
		else
			dados_servico.put("var_diagnostico", "");

		dados_servico.put("var_estado", this.getEstado());

		if (this.getObservacaoPublica() != null)
			dados_servico.put("var_observacao_publica", this.getObservacaoPublica());
		else
			dados_servico.put("var_observacao_publica", "");

		if (this.getObservacaoPrivada() != null)
			dados_servico.put("var_observacao_privada", this.getObservacaoPrivada());
		else
			dados_servico.put("var_observacao_privada", "");

		dados_servico.put("var_id_servico_generico", this.getServicoGenerico().getIdServicoGenerico());
		dados_servico.put("var_id_hospital", this.getIdHospital());

		return dados_servico;
	}

	private int id_servico;
	private Colaborador colaborador;
	private Utente utente;
	private int id_pagamento;
	private double preco;
	private double percentagem;
	private Date data;
	private String sintoma;
	private String diagnostico;
	private String estado;
	private String observacao_publica;
	private String observacao_privada;
	private ServicoGenerico servico_generico;
	private int id_hospital;

	public static final String ESTADO_CANCELADO = "cancelado";
	public static final String ESTADO_CONCLUIDO_POR_COMPARENCIA = "concluido_por_comparencia";
	public static final String ESTADO_CONCLUIDO_POR_FALTA = "concluido_por_falta";
	public static final String ESTADO_ACTIVO = "activo";
}
